/**
 * 搜索服务工具类
 * 用于处理搜索相关的API请求
 */

const { http } = require('./http.js');
const { 
  setStorage, 
  getStorage, 
  removeStorage, 
  getToken 
} = require('./storageUtil.js');

/**
 * 搜索服务类
 */
class SearchService {
  constructor() {
    this.baseUrl = '/hyg/search';
    this.searchHistoryKey = 'search_history';
    this.maxHistoryCount = 10;
  }

  /**
   * 根据关键词搜索题库信息
   * @param {string} keyword 搜索关键词
   * @param {number} pageNum 页码
   * @param {number} pageSize 每页大小
   * @returns {Promise} 搜索结果
   */
  async searchQuestionBanks(keyword, pageNum = 1, pageSize = 20) {
    try {
      // 检查是否有token
      const token = getToken();
      
      console.log('搜索请求token状态:', !!token);
      console.log('搜索参数:', { keyword, pageNum, pageSize });
      
      const res = await http.get(`${this.baseUrl}/questionBanks`, {
        keyword: keyword,
        pageNum: pageNum,
        pageSize: pageSize
      });
      
      console.log('HTTP请求返回结果:', res);
      console.log('返回结果类型:', typeof res);
      console.log('返回结果是否为对象:', res && typeof res === 'object');
      
      // 保存搜索历史到本地缓存
      if (keyword && keyword.trim()) {
        this.saveSearchHistory(keyword.trim());
      }
      
      return res;
    } catch (error) {
      console.error('搜索题库失败:', error);
      
      // 如果是401错误，提示用户登录
      if (error.code === 401) {
        wx.showToast({
          title: '请先登录',
          icon: 'none'
        });
      }
      
      throw error;
    }
  }

  /**
   * 保存搜索历史到本地缓存
   * @param {string} keyword 搜索关键词
   */
  saveSearchHistory(keyword) {
    try {
      if (!keyword || !keyword.trim()) {
        return;
      }

      let history = this.getSearchHistory();
      
      // 移除已存在的相同关键词
      history = history.filter(item => item !== keyword);
      
      // 添加到开头
      history.unshift(keyword);
      
      // 限制历史记录数量
      if (history.length > this.maxHistoryCount) {
        history = history.slice(0, this.maxHistoryCount);
      }
      
      // 保存到本地缓存
      setStorage(this.searchHistoryKey, history);
    } catch (error) {
      console.error('保存搜索历史失败:', error);
    }
  }

  /**
   * 获取搜索历史
   * @returns {Array} 搜索历史列表
   */
  getSearchHistory() {
    try {
      const history = getStorage(this.searchHistoryKey);
      return Array.isArray(history) ? history : [];
    } catch (error) {
      console.error('获取搜索历史失败:', error);
      return [];
    }
  }

  /**
   * 清空搜索历史
   */
  clearSearchHistory() {
    try {
      removeStorage(this.searchHistoryKey);
    } catch (error) {
      console.error('清空搜索历史失败:', error);
    }
  }

  /**
   * 删除指定的搜索历史项
   * @param {string} keyword 要删除的关键词
   */
  removeSearchHistoryItem(keyword) {
    try {
      let history = this.getSearchHistory();
      history = history.filter(item => item !== keyword);
      setStorage(this.searchHistoryKey, history);
    } catch (error) {
      console.error('删除搜索历史项失败:', error);
    }
  }

  /**
   * 获取搜索历史数量
   * @returns {number} 历史记录数量
   */
  getSearchHistoryCount() {
    try {
      const history = this.getSearchHistory();
      return history.length;
    } catch (error) {
      console.error('获取搜索历史数量失败:', error);
      return 0;
    }
  }
}

// 创建单例实例
const searchService = new SearchService();

module.exports = { searchService };
